home *** CD-ROM | disk | FTP | other *** search
/ ftp.alaska-software.com / 2014.06.ftp.alaska-software.com.tar / ftp.alaska-software.com / 3pp / mxsetup.old / {app} / MxPshBtn.prg < prev    next >
Text File  |  2001-09-14  |  23KB  |  670 lines

  1. //////////////////////////////////////////////////////////////////////
  2. //
  3. // MxPshBtn.PRG
  4. //
  5. //  Copyright:
  6. //      Maniacc Software Inc., (c) 2001. All rights reserved.         
  7. //  
  8. //  Contents:
  9. //      MxPushButton Class Code substitute for XbpPushButton - provides for 
  10. //       much more flexible display parameters.
  11. //   
  12. //////////////////////////////////////////////////////////////////////
  13.  
  14. #include "Gra.ch"
  15. #include "Xbp.ch"
  16. #include "Appevent.ch"
  17. #include "Mx.ch"
  18. #include "Common.ch"
  19.  
  20. #define MX_CAPTION    1
  21. #define MX_POSITION    2
  22. #define MX_SIZE        3
  23. #define MX_FONT        4
  24. #define MX_PARAMS        5
  25.  
  26. *******************************************************************
  27. * ( MxPushButton ) CLASS DEFINITION
  28. *******************************************************************
  29.  
  30. CLASS MxPushButton FROM XbpPushButton
  31.  
  32.     HIDDEN:
  33.         VAR darkShadowLeft
  34.         VAR highlightLeft
  35.         VAR darkShadowTop
  36.         VAR highlightTop
  37.         VAR shadowBottom
  38.         VAR darkShadowBottom
  39.         VAR shadowRight
  40.         VAR darkShadowRight
  41.         VAR nColorBG
  42.         VAR aCaptions
  43.  
  44.     PROTECTED:
  45.  
  46.  
  47.     EXPORTED:
  48.  
  49.         VAR aSize
  50.         VAR type
  51.         VAR captured
  52.         VAR drawingArea
  53.         VAR oCaption, nCaptionType, captionPos, captionSize, captionFont, CaptionParams
  54.         VAR Bitmap, nBitmapType, bitmapPos, bitmapSize, bitmapFont, BitmapParams 
  55.         VAR Icon, nIconType, iconPos, iconSize, iconFont, IconParams 
  56.         VAR status
  57.         VAR oCaptions
  58.         
  59.         METHOD init, create, destroy, configure 
  60.         METHOD invert, revert, raise, flatten, clearbuttons
  61.         METHOD keyActivate, reset, setStatus
  62.         METHOD toFront, toBack
  63.  
  64. ENDCLASS
  65.  
  66.  
  67.  
  68.  
  69. *******************************************************************
  70. * ( MxPushButton ) METHOD init
  71. *******************************************************************
  72.  
  73. METHOD MxPushButton:init( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  74.  
  75.     ::xbpPushButton:init( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  76.     ::xbpPushButton:tabstop := .F.
  77.  
  78.     ::drawingArea       := XbpStatic():new( ::xbpPushButton )
  79.     ::highlightLeft     := XbpStatic():new( ::drawingArea )
  80.     ::darkShadowLeft    := XbpStatic():new( ::drawingArea )
  81.     ::highlightTop      := XbpStatic():new( ::drawingArea )
  82.     ::darkShadowTop     := XbpStatic():new( ::drawingArea )
  83.     ::shadowBottom      := XbpStatic():new( ::drawingArea )
  84.     ::darkShadowBottom  := XbpStatic():new( ::drawingArea )
  85.     ::shadowRight       := XbpStatic():new( ::drawingArea )
  86.     ::darkShadowRight   := XbpStatic():new( ::drawingArea )
  87.     ::captured          := .F.
  88.     ::type              := MX_NONE
  89.     ::status            := MXPB_UP
  90.  
  91.     ::caption           := ""
  92.     ::nCaptionType      := XBPSTATIC_TYPE_TEXT
  93.     ::captionPos        := {5,5}
  94.     ::captionSize       := {0,0}
  95.     ::captionFont       := ""
  96.     ::captionParams     := aPresParam
  97.  
  98.     ::Bitmap            := ""
  99.     ::nBitmapType       := XBPSTATIC_TYPE_BITMAP
  100.     ::BitmapPos         := {5,5}
  101.     ::BitmapSize        := {2,2}
  102.     ::bitmapFont        := ""
  103.     ::bitmapParams      := aPresParam
  104.  
  105.     ::Icon              := 0
  106.     ::nIconType         := XBPSTATIC_TYPE_ICON
  107.     ::iconPos           := {5,5}
  108.     ::iconSize          := {2,2}
  109.     ::iconFont          := ""
  110.     ::iconParams        := aPresParam
  111.  
  112.     ::aCaptions         := {{::caption,::captionPos,::captionSize,::captionFont,::captionParams},;
  113.                             {::bitmap,::bitmapPos,::bitmapSize,::bitmapFont,::bitmapParams},;
  114.                             {::icon,::iconPos,::iconSize,::iconFont,::iconParams}}
  115.     ::oCaptions         := {}
  116.  
  117. RETURN self
  118.  
  119.  
  120.  
  121. *******************************************************************
  122. * ( MxPushButton ) METHOD create
  123. *******************************************************************
  124.  
  125. METHOD MxPushButton:create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  126.  
  127.     LOCAL oXbp, i, aImageSize, cMsg, lExists := .F.
  128.  
  129.     ::aSize := aSize
  130.     aAdd(::oCaptions,Nil)
  131.  
  132.     if aPresParam==Nil
  133.         aPresParam := {}
  134.     endif
  135.     if ::captionParams==Nil
  136.         ::captionParams := {}
  137.     endif
  138.     if ::bitmapParams==Nil
  139.         ::bitmapParams := {}
  140.     endif
  141.     if ::iconParams==Nil
  142.         ::iconParams := {}
  143.     endif
  144.  
  145.     if ::type==MX_NONE
  146.         // leave iVar settings alone
  147.     elseif ::type==MX_3D
  148.         iif(Mx_Debug>9,MxMsgBox(iif(oParent:setColorBG()==Nil,"Nil",str(oParent:setColorBG()))),Nil)
  149.         ::border  := .T.
  150.         ::status  := MXPB_UP
  151.     elseif ::type==MX_RAISED
  152.         ::border  := .T.
  153.         ::status  := MXPB_UP
  154.     elseif ::type==MX_FLAT
  155.         ::border  := .F.
  156.         ::status  := MXPB_FLAT
  157.     elseif ::type==MX_FLYOVER
  158.         if !empty(aPresParam)
  159.             i := 1
  160.             do while i<=len(aPresParam)
  161.                 if aPresParam[i,1]==XBP_PP_BGCLR
  162.                     if aPresParam[i,2]==Nil
  163.                         aPresParam[i,2] := oParent:setColorBG()
  164.                         lExists := .T.
  165.                     endif
  166.                 endif
  167.                 i++
  168.             enddo
  169.         endif
  170.         if !lExists
  171.             aAdd(aPresParam,{XBP_PP_BGCLR,oParent:setColorBG()})
  172.         endif
  173.         ::nColorBG := oParent:setColorBG()
  174.         ::border  := .F.
  175.         ::status  := MXPB_FLAT
  176.     endif
  177.  
  178.     ::border := iif(::type==MX_FLYOVER,.F.,::border)
  179.  
  180.     *
  181.     * If aCaptions has not been populated, put the ::caption, ::bitmap, & ::icon data
  182.     * into the array
  183.     *
  184.  
  185.     if empty(::aCaptions[1,MX_CAPTION])    // .and. !empty(::caption)
  186.         ::aCaptions[1,MX_CAPTION]  := ::caption
  187.         ::aCaptions[1,MX_POSITION] := ::captionPos
  188.         ::aCaptions[1,MX_SIZE]     := ::captionSize
  189.         ::aCaptions[1,MX_FONT]     := ::captionFont
  190.         ::aCaptions[1,MX_PARAMS]   := iif(!empty(::captionParams),::captionParams,{})
  191.     endif
  192.     if empty(::aCaptions[2,MX_CAPTION])    // .and. !empty(::bitmap)
  193.         ::aCaptions[2,MX_CAPTION]  := ::bitmap
  194.         ::aCaptions[2,MX_POSITION] := ::bitmapPos
  195.         ::aCaptions[2,MX_SIZE]     := ::bitmapSize
  196.         ::aCaptions[2,MX_FONT]     := ::bitmapFont
  197.         ::aCaptions[2,MX_PARAMS]   := iif(!empty(::bitmapParams),::bitmapParams,{})
  198.     endif
  199.     if empty(::aCaptions[3,MX_CAPTION])    // .and. !empty(::icon)
  200.         ::aCaptions[3,MX_CAPTION]  := ::icon
  201.         ::aCaptions[3,MX_POSITION] := ::iconPos
  202.         ::aCaptions[3,MX_SIZE]     := ::iconSize
  203.         ::aCaptions[3,MX_FONT]     := ::iconFont
  204.         ::aCaptions[3,MX_PARAMS]   := iif(!empty(::iconParams),::iconParams,{})
  205.     endif
  206.  
  207.     *
  208.     * Make sure the Pushbutton Size is big enough for all captions
  209.     *
  210.     for i := 1 to len(::aCaptions)-1
  211.         if !empty(::aCaptions[i,MX_CAPTION])
  212.             if valtype(::aCaptions[i,MX_CAPTION])=="N".or.(valtype(::aCaptions[i,MX_CAPTION])=="C".and.file(::aCaptions[i,MX_CAPTION]))
  213.                 if !isBitmap(::aCaptions[i,MX_CAPTION])
  214.                     aImageSize := IconSize(::aCaptions[i,MX_CAPTION])
  215.                 else
  216.                     aImageSize := BitmapSize(::aCaptions[i,MX_CAPTION])
  217.                 endif
  218.                 if ::aCaptions[i,MX_SIZE][1]<3
  219.                     ::aCaptions[i,MX_SIZE] := aImageSize
  220.                 endif
  221.                 ::aSize[1] := iif(::aSize[1]<::aCaptions[i,MX_SIZE][1]+::aCaptions[i,MX_POSITION][1]+5,;
  222.                                   ::aCaptions[i,MX_SIZE][1]+::aCaptions[i,MX_POSITION][1]+5,;
  223.                                   aSize[1])
  224.                 ::aSize[2] := iif(::aSize[2]<::aCaptions[i,MX_SIZE][2]+::aCaptions[i,MX_POSITION][2]+5,;
  225.                                   ::aCaptions[i,MX_SIZE][2]+::aCaptions[i,MX_POSITION][2]+5,;
  226.                                   aSize[2])
  227.             elseif valtype(::aCaptions[i,MX_CAPTION])=="C" .and. ::autoSize
  228.                 oXbp := MxStatic():new()
  229.                 oXbp:autoSize := .T.
  230.                 oXbp:caption := ::aCaptions[i,MX_CAPTION]
  231.                 oXbp:create(oParent,,{0,0},{0,0},aPresParam,.F.)
  232.                 ::aCaptions[i,MX_SIZE] := oXbp:currentSize()
  233.                 oXbp:destroy()
  234.                 ::aSize[1] := iif(::autoSize.and.::aSize[1]<::aCaptions[i,MX_SIZE][1]+::aCaptions[i,MX_POSITION][1]+5,;
  235.                                   ::aCaptions[i,MX_SIZE][1]+::aCaptions[i,MX_POSITION][1]+5,;
  236.                                   aSize[1])
  237.                 ::aSize[2] := iif(::autoSize.and.::aSize[2]<::aCaptions[i,MX_SIZE][2]+::aCaptions[i,MX_POSITION][2]+5,;
  238.                                   ::aCaptions[i,MX_SIZE][2]+::aCaptions[i,MX_POSITION][2]+5,;
  239.                                   aSize[1])
  240.             endif
  241.         endif
  242.     next i
  243.  
  244.     ::aCaptions[1,MX_POSITION][1] := iif(::aCaptions[1,MX_POSITION][1]<4,4,::aCaptions[1,MX_POSITION][1])
  245.     ::aCaptions[1,MX_POSITION][2] := iif(::aCaptions[1,MX_POSITION][2]<5,5,::aCaptions[1,MX_POSITION][2])
  246.     ::aCaptions[1,MX_SIZE] := iif(::aCaptions[1,MX_SIZE][1]==0,{::aSize[1]-6,::aSize[2]-10},::aCaptions[1,MX_SIZE])
  247.     ::aCaptions[1,MX_SIZE][1] := iif(::aCaptions[1,MX_SIZE][1]>::aSize[1]-6-::aCaptions[1,MX_POSITION][1],;
  248.                                      ::aSize[1]-6-::aCaptions[1,MX_POSITION][1],;
  249.                                      ::aCaptions[1,MX_SIZE][1])
  250.     ::aCaptions[1,MX_SIZE][2] := iif(::aCaptions[1,MX_SIZE][2]>::aSize[2]-6-::aCaptions[1,MX_POSITION][2],;
  251.                                      ::aSize[2]-6-::aCaptions[1,MX_POSITION][2],;
  252.                                      ::aCaptions[1,MX_SIZE][2])
  253.     
  254.     ::xbpPushButton:caption := chr(-1)
  255.     
  256.     ::xbpPushButton:create( oParent, oOwner, aPos, ::aSize, aPresParam, lVisible )
  257.     ::xbpPushButton:killInputFocus := { |uNil1,uNil2,oSelf| ;
  258.         iif(::type==MX_FLYOVER,::flatten(),::revert()),;
  259.         ::captured:=.F.,;
  260.         ::drawingArea:captureMouse(.F.) }
  261.     ::xbpPushButton:setSize(::aSize)
  262.     ::xbpPushButton:setInputFocus := { |uNil1,uNil2,oSelf| ::clearButtons(),iif(::type==MX_FLYOVER,::raise(),::status := MXPB_DOWN) }
  263.  
  264.     ::drawingArea:caption := iif(empty(::Bitmap),::caption,"")
  265.  
  266.     ::drawingArea:options := XBPSTATIC_TEXT_CENTER + XBPSTATIC_TEXT_VCENTER + XBPSTATIC_TEXT_WORDBREAK
  267.     if valtype(::caption)=="C"
  268.         ::drawingArea:create( ::XbpPushButton, , {0,0}, ::aSize, aPresParam, lVisible )
  269.     elseif valtype(::caption)=="N"
  270.         ::drawingArea:create( ::XbpPushButton, , {0,0}, ::aSize, aPresParam, lVisible )
  271.     endif
  272.  
  273.     ::drawingArea:lbUp   := {|aPos,uNil,oSelf| ;
  274.         iif(::status==MXPB_DOWN,PostAppEvent(xbeP_Activate,,,self),Nil),;
  275.         ::drawingArea:captureMouse(.F.),;
  276.         ::revert(),;
  277.         ::status := MXPB_UP }
  278.     ::drawingArea:lbDown := {|aPos,uNil,oSelf| ;
  279.         ::drawingArea:captureMouse(.T.),;
  280.         ::captured := .T.,;
  281.         ::invert(),;
  282.         ::status := MXPB_DOWN }
  283.     ::drawingArea:motion := {|aPos,uNil,oSelf| ::setStatus(aPos) }
  284.  
  285.     ::nColorBG := iif(::drawingArea:setColorBG()<>Nil,::drawingArea:setColorBG(),XBPSYSCLR_3DFACE)
  286.  
  287.     for i := 1 to len(::aCaptions)
  288.         if !empty(::aCaptions[i,MX_CAPTION])
  289.             if valType(::aCaptions[i,MX_CAPTION])=="C".and.!file(::aCaptions[i,MX_CAPTION])
  290.                 do while len(::oCaptions)<i
  291.                     aAdd(::oCaptions,Nil)
  292.                 enddo
  293.                 ::oCaptions[i] := MxStatic():new( ::drawingArea )
  294.                 ::oCaptions[i]:caption := ::aCaptions[i,MX_CAPTION]
  295.                 ::oCaptions[i]:type    := XBPSTATIC_TYPE_TEXT
  296.                 ::oCaptions[i]:options := iif(!chr(13)$::aCaptions[i,MX_CAPTION],XBPSTATIC_TEXT_CENTER+XBPSTATIC_TEXT_VCENTER,::drawingArea:options)
  297.                 iif(!empty(::aCaptions[i,MX_FONT]),::oCaptions[i]:setFontCompoundName(::aCaptions[i,MX_FONT]),Nil)
  298.                 ::oCaptions[i]:create( ::drawingArea,,::aCaptions[i,MX_POSITION],::aCaptions[i,MX_SIZE], ::aCaptions[i,MX_PARAMS] )
  299.                 ::oCaptions[i]:setcolorBG(XBPSYSCLR_TRANSPARENT)
  300.             else
  301.                 do while len(::oCaptions)<i
  302.                     aAdd(::oCaptions,Nil)
  303.                 enddo
  304.                 if IsBitmap(::aCaptions[i,MX_CAPTION]);
  305.                 .and.::aCaptions[i,MX_SIZE][1]==aImageSize[1];
  306.                 .and.::aCaptions[i,MX_SIZE][2]==aImageSize[2];
  307.                 .and.i>1.and.valtype(::aCaptions[i,MX_CAPTION])<>"C"
  308.                     ::oCaptions[i] := MxStatic():new( ::drawingArea )
  309.                     ::oCaptions[i]:caption := ::aCaptions[i,MX_CAPTION]
  310.                     ::oCaptions[i]:type    := XBPSTATIC_TYPE_BITMAP
  311.                     ::oCaptions[i]:create( ::drawingArea,,::aCaptions[i,MX_POSITION],::aCaptions[i,MX_SIZE], ::aCaptions[i,MX_PARAMS] )
  312.                     ::oCaptions[i]:setcolorBG(XBPSYSCLR_TRANSPARENT)
  313.                 elseif !empty(::aCaptions[i,MX_CAPTION])
  314.                     ::oCaptions[i] := AddImage(::drawingArea,;
  315.                                               ::aCaptions[i,MX_POSITION],;
  316.                                               ::aCaptions[i,MX_SIZE],;
  317.                                               ::aCaptions[i,MX_CAPTION])
  318.                 endif
  319.             endif
  320.         endif
  321.     next i
  322.     if !empty(::aCaptions[1,MX_CAPTION])
  323.         ::oCaption := ::oCaptions[1]
  324.     endif
  325.  
  326.     if ::border
  327.         ::highlightLeft    := XbpStatic():new():create( ::drawingArea,,{0,1},{1,::aSize[2]-1},{{XBP_PP_BGCLR,XBPSYSCLR_3DHIGHLIGHT}} )    
  328.         ::darkShadowLeft   := XbpStatic():new():create( ::drawingArea,,{1,1},{1,::aSize[2]-2},{{XBP_PP_BGCLR,::nColorBG}} )    
  329.         ::highlightTop     := XbpStatic():new():create( ::drawingArea,,{1,::aSize[2]-1},{::aSize[1]-2,1},{{XBP_PP_BGCLR,XBPSYSCLR_3DHIGHLIGHT}} )    
  330.         ::darkShadowTop    := XbpStatic():new():create( ::drawingArea,,{1,::aSize[2]-2},{::aSize[1]-3,1},{{XBP_PP_BGCLR,::nColorBG}} )    
  331.         ::shadowBottom     := XbpStatic():new():create( ::drawingArea,,{1,1},{::aSize[1]-2,1},{{XBP_PP_BGCLR,XBPSYSCLR_3DSHADOW}} )
  332.         ::darkShadowBottom := XbpStatic():new():create( ::drawingArea,,{0,0},{::aSize[1],1},{{XBP_PP_BGCLR,iif(::type==MX_RAISED,iif((::nColorBG<8.and.::nColorBG>=0),::nColorBG+8,XBPSYSCLR_3DSHADOW),XBPSYSCLR_BUTTONDARK)}} )
  333.         ::shadowRight      := XbpStatic():new():create( ::drawingArea,,{::aSize[1]-2,1},{1,::aSize[2]},{{XBP_PP_BGCLR,XBPSYSCLR_3DSHADOW}} )    
  334.         ::darkShadowRight  := XbpStatic():new():create( ::drawingArea,,{::aSize[1]-1,0},{1,::aSize[2]+1},{{XBP_PP_BGCLR,iif(::type==MX_RAISED,iif((::nColorBG<8.and.::nColorBG>=0),::nColorBG+8,XBPSYSCLR_3DSHADOW),XBPSYSCLR_BUTTONDARK)}} )    
  335.     elseif ::type==MX_FLYOVER
  336.         ::highlightLeft    := XbpStatic():new():create( ::drawingArea,,{0,1},{1,::aSize[2]-1},{{XBP_PP_BGCLR,::setParent():setcolorBG()}} )
  337.         ::highlightTop     := XbpStatic():new():create( ::drawingArea,,{1,::aSize[2]-1},{::aSize[1]-2,1},{{XBP_PP_BGCLR,::nColorBG}} )    
  338.         ::darkShadowBottom := XbpStatic():new():create( ::drawingArea,,{0,0},{::aSize[1],1},{{XBP_PP_BGCLR,::nColorBG}} )
  339.         ::darkShadowRight  := XbpStatic():new():create( ::drawingArea,,{::aSize[1]-1,0},{1,::aSize[2]+1},{{XBP_PP_BGCLR,::nColorBG}} )    
  340.     endif
  341.  
  342.     ::keyboard := { |nKeyCode,uNil,oSelf| ;
  343.                     iif(nKeyCode==xbeK_ENTER,::keyActivate(),;
  344.                         iif(nKeyCode==xbeK_SPACE,;
  345.                             ::reset(oSelf),;
  346.                             Nil)) }
  347.     if ::autoSize .and. ( ::currentSize()[1]<::oCaption:currentSize()[1] .or. ::currentSize()[2]<::oCaption:currentSize()[2] )
  348.         ::XbpPushbutton:setSize(::oCaption:currentSize())
  349.     endif
  350.     for i:=1 to len(::drawingArea:childList())
  351.         ::drawingArea:childList()[i]:motion  := ::drawingArea:motion
  352.         ::drawingArea:childList()[i]:lbUp    := ::drawingArea:lbUp
  353.         ::drawingArea:childList()[i]:lbDown  := ::drawingArea:lbDown
  354.         for j:= 1 to len(::drawingArea:childList()[i]:childList())
  355.             ::drawingArea:childList()[i]:childList()[j]:motion := ::drawingArea:motion
  356.             ::drawingArea:childList()[i]:childList()[j]:lbUp    := ::drawingArea:lbUp
  357.             ::drawingArea:childList()[i]:childList()[j]:lbDown  := ::drawingArea:lbDown
  358.         next j
  359.     next i
  360.  
  361. RETURN self
  362.  
  363.  
  364.  
  365. *******************************************************************
  366. * ( MxPushButton ) METHOD keyActivate
  367. *******************************************************************
  368.  
  369. METHOD MxPushButton:keyActivate()
  370.  
  371.     LOCAL lCaptured := ::captured
  372.     LOCAL status := ::status
  373.  
  374.     ::captured := .T.
  375.     ::status   := MXPB_UP
  376.     ::invert()
  377.     sleep(20)
  378.     ::revert()
  379.     ::captured := lCaptured
  380.     ::status := status
  381.     PostAppEvent(xbeP_Activate,,,Self)
  382.  
  383. RETURN self
  384.  
  385.  
  386.  
  387. *******************************************************************
  388. * ( MxPushButton ) METHOD reset
  389. *******************************************************************
  390.  
  391. METHOD MxPushButton:reset(oSelf)
  392.  
  393.     LOCAL lCaptured := ::captured
  394.     LOCAL status := ::status
  395.  
  396.     setAppFocus(oSelf:setParent())
  397.     setAppFocus(oSelf)
  398.     ::captured := .T.
  399.     ::status := MXPB_UP
  400.     ::invert()
  401.     sleep(20)
  402.     ::revert()
  403.     ::captured := lCaptured
  404.     ::status := status
  405.  
  406. RETURN self
  407.  
  408.  
  409.  
  410. *******************************************************************
  411. * ( MxPushButton ) METHOD destroy
  412. *******************************************************************
  413.  
  414. METHOD MxPushButton:destroy()
  415.  
  416.     ::XbpPushButton:destroy()
  417.  
  418. RETURN self
  419.  
  420.  
  421.  
  422. *******************************************************************
  423. * ( MxPushButton ) METHOD configure
  424. *******************************************************************
  425.  
  426. METHOD MxPushButton:configure( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  427.  
  428.     ::destroy()
  429.     ::create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  430.  
  431. RETURN self
  432.  
  433.  
  434. *******************************************************************
  435. * ( MxPushButton ) METHOD SetStatus
  436. *******************************************************************
  437.  
  438. METHOD setStatus(aPos)
  439.  
  440.     if aPos[1]<=0.or.aPos[1]>=::aSize[1].or.aPos[2]<=0.or.aPos[2]>=::aSize[2]
  441.         if ::captured
  442.             ::drawingArea:captureMouse(.F.)
  443.             ::captured := .F.
  444.             if ::type==MX_FLYOVER
  445.                 ::flatten()
  446.             endif
  447.         endif
  448.     else
  449.         if !::captured
  450.             ::drawingArea:captureMouse(.T.)
  451.             ::captured := .T.
  452.             if ::type==MX_FLYOVER
  453.                 ::raise()
  454.             endif
  455.         endif
  456.     endif
  457.  
  458. RETURN self
  459.  
  460.  
  461.  
  462. *******************************************************************
  463. * ( MxPushButton ) METHOD invert
  464. *******************************************************************
  465.  
  466. METHOD MxPushButton:invert()
  467.  
  468.     LOCAL i
  469.  
  470.     if ::border .and. ::captured .and. ::status<>MXPB_DOWN
  471.         ::highlightLeft:setColorBG(XBPSYSCLR_3DSHADOW)
  472.         ::darkShadowLeft:setColorBG(XBPSYSCLR_BUTTONDARK)
  473.         ::highlightTop:setColorBG(XBPSYSCLR_3DSHADOW)
  474.         ::darkShadowTop:setColorBG(XBPSYSCLR_BUTTONDARK)
  475.         ::darkShadowBottom:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  476.         ::darkShadowRight:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  477.         for i := 1 to len(::oCaptions)-1
  478.             if !empty(::aCaptions[i,MX_CAPTION])
  479.                 ::oCaptions[i]:setPos({::aCaptions[i,MX_POSITION][1]+1,::aCaptions[i,MX_POSITION][2]-1})
  480.             endif
  481.         next i
  482.         ::status := MXPB_DOWN
  483.     elseif ::type==MX_FLYOVER .and. ::captured
  484.         ::highlightLeft:setColorBG(XBPSYSCLR_3DSHADOW)
  485.         ::highlightTop:setColorBG(XBPSYSCLR_3DSHADOW)
  486.         ::darkShadowBottom:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  487.         ::darkShadowRight:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  488.         ::status := MXPB_DOWN
  489.     endif
  490.  
  491. RETURN self
  492.  
  493.  
  494. *******************************************************************
  495. * ( MxPushButton ) METHOD revert
  496. *******************************************************************
  497.  
  498. METHOD MxPushButton:revert()
  499.  
  500.     if ::border .and. ::captured
  501.         ::highlightLeft:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  502.         ::darkShadowLeft:setColorBG(::nColorBG)
  503.         ::highlightTop:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  504.         ::darkShadowTop:setColorBG(::nColorBG)
  505.         ::darkShadowBottom:setColorBG(iif(::type==MX_RAISED,iif((::nColorBG<8.and.::nColorBG>=0).or.::nColorBG<-53,::nColorBG+8,XBPSYSCLR_3DSHADOW),XBPSYSCLR_BUTTONDARK))
  506.         ::darkShadowRight:setColorBG(iif(::type==MX_RAISED,iif((::nColorBG<8.and.::nColorBG>=0).or.::nColorBG<-53,::nColorBG+8,XBPSYSCLR_3DSHADOW),XBPSYSCLR_BUTTONDARK))
  507.         ::status := MXPB_UP
  508.         for i := 1 to len(::oCaptions)-1
  509.             if !empty(::aCaptions[i,MX_CAPTION])
  510.                 ::oCaptions[i]:setPos(::aCaptions[i,MX_POSITION])
  511.             endif
  512.         next i
  513.     elseif ::type==MX_FLYOVER .and. ::captured
  514.         ::highlightLeft:setColorBG(::nColorBG)
  515.         ::highlightTop:setColorBG(::nColorBG)
  516.         ::darkShadowBottom:setColorBG(::nColorBG)
  517.         ::darkShadowRight:setColorBG(::nColorBG)
  518.         ::status := MXPB_UP
  519.     endif
  520.  
  521. RETURN self
  522.  
  523.  
  524.  
  525. *******************************************************************
  526. * ( MxPushButton ) METHOD raise
  527. *******************************************************************
  528.  
  529. METHOD MxPushButton:raise()
  530.  
  531.     ::highlightLeft:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  532.     ::highlightTop:setColorBG(XBPSYSCLR_3DHIGHLIGHT)
  533.     ::darkShadowBottom:setColorBG(XBPSYSCLR_3DSHADOW)
  534.     ::darkShadowRight:setColorBG(XBPSYSCLR_3DSHADOW)
  535.     ::status := MXPB_UP
  536.  
  537. RETURN self
  538.  
  539.  
  540.  
  541. *******************************************************************
  542. * ( MxPushButton ) METHOD flatten
  543. *******************************************************************
  544.  
  545. METHOD MxPushButton:flatten()
  546.  
  547.     ::highlightLeft:setColorBG(iif(::setparent():setcolorBG()<>Nil,::setparent():setcolorBG(),::nColorBG))
  548.     ::highlightTop:setColorBG(iif(::setparent():setcolorBG()<>Nil,::setparent():setcolorBG(),::nColorBG))
  549.     ::darkShadowBottom:setColorBG(iif(::setparent():setcolorBG()<>Nil,::setparent():setcolorBG(),::nColorBG))
  550.     ::darkShadowRight:setColorBG(iif(::setparent():setcolorBG()<>Nil,::setparent():setcolorBG(),::nColorBG))
  551.     ::status := MXPB_FLAT
  552.  
  553. RETURN self
  554.  
  555.  
  556.  
  557. *******************************************************************
  558. * ( MxPushButton ) METHOD clearButtons
  559. *******************************************************************
  560.  
  561. METHOD clearButtons()
  562.  
  563.     LOCAL aChildren := ::setParent():childlist()
  564.     LOCAL i
  565.  
  566.     for i := 1 to len(aChildren)
  567.         if aChildren[i]:isderivedFrom("MxPushbutton").and.aChildren[i]:type==MX_RAISED.and.aChildren[i]:type==MX_FLYOVER
  568.             aChildren[i]:flatten()
  569.             aChildren[i]:drawingArea:captureMouse(.F.)
  570.         endif
  571.     next i
  572.  
  573. RETURN self
  574.  
  575.  
  576.  
  577.  
  578. *******************************************************************
  579. * ( MxPushButton ) METHOD toFront
  580. *******************************************************************
  581.  
  582. METHOD MxPushButton:toFront()
  583.  
  584.     if ::clipsiblings
  585.         ::XbpPushButton:toFront()
  586.     else
  587.         ::XbpPushButton:toBack()
  588.     endif
  589.  
  590. RETURN self
  591.  
  592.  
  593.  
  594.  
  595. *******************************************************************
  596. * ( MxPushButton ) METHOD toBack
  597. *******************************************************************
  598.  
  599. METHOD MxPushButton:ToBack()
  600.  
  601.     if ::clipsiblings
  602.         ::XbpPushButton:toBack()
  603.     else
  604.         ::XbpPushButton:toFront()
  605.     endif
  606.  
  607. RETURN self
  608.  
  609.  
  610.  
  611.  
  612.  
  613. *******************************************************************
  614. * FUNCTION MxPshBtn() - Wrapper for MxPushButton Class
  615. *******************************************************************
  616.  
  617. FUNCTION MxPshBtn( oParent, oOwner, aPos, aSize, aPresParam, lVisible, nType, aCaption, aBitmap, aIcon )
  618.  
  619.     // Notes: aCaption = { Caption, captionPos, captionSize, captionFont }
  620.     //        aBitmap  = { Bitmap,  bitmapPos,  bitmapSize, bitmapFont }
  621.     //        aIcon    = { Icon,  iconPos,  iconSize, iconFont }
  622.     //        nType    = MX_NONE, MX_3D, MX_RAISED, MX_FLAT or MX_FLYOVER
  623.  
  624.     LOCAL oXbp
  625.  
  626.     default aIcon to {"",Nil,Nil}
  627.  
  628.     oXbp := MxPushButton():new()
  629.     oXbp:type         := nType
  630.     oXbp:caption      := iif(empty(aCaption[1]),"",aCaption[1])
  631.     oXbp:CaptionPos   := aCaption[2]
  632.     oXbp:CaptionSize  := aCaption[3]
  633.     oXbp:CaptionFont  := aCaption[4]
  634.     oXbp:Bitmap       := iif(empty(aBitmap[1]),"",aBitmap[1])
  635.     oXbp:BitmapPos    := aBitmap[2]
  636.     oXbp:BitmapSize   := aBitmap[3]
  637.     oXbp:Icon         := iif(empty(aIcon[1]),"",aIcon[1])
  638.     oXbp:IconPos      := aIcon[2]
  639.     oXbp:IconSize     := aIcon[3]
  640.     oXbp:create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  641.  
  642. RETURN oXbp
  643.  
  644.  
  645.  
  646. *******************************************************************
  647. * FUNCTION MxCloseBtn() - Emulate a Close Button
  648. *******************************************************************
  649.  
  650. FUNCTION MxCloseBtn( oParent, oOwner, aPos, aSize )
  651.  
  652.     LOCAL oXbp
  653.  
  654.     DEFAULT oParent to SetAppWindow()
  655.     DEFAULT oOwner to oParent
  656.     DEFAULT aPos to {oParent:currentSize()[1]-18,oParent:currentSize()[2]-18}
  657.     DEFAULT aSize to {17,17}
  658.  
  659.     oXbp := XbpPushButton():new()
  660.     oXbp:caption  := chr(114)
  661.     oXbp:activate := { || PostAppEvent( xbeP_Close ) }
  662.     oXbp:create( oParent, oOwner, aPos, aSize, {{XBP_PP_COMPOUNDNAME,"8.Marlett"}} )
  663.  
  664. RETURN oXbp
  665.  
  666.  
  667.  
  668.  
  669.  
  670.